home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / circuits / spice2g6.z / spice2g6 / spice / Fortran / errchk.f < prev    next >
Encoding:
Text File  |  1989-02-03  |  18.8 KB  |  619 lines

  1. c spice version 2g.6  sccsid=errchk.ma 3/15/83
  2.       subroutine errchk
  3.       implicit double precision (a-h,o-z)
  4. c
  5. c
  6. c     this routine drives the pre-processing and general error-checking
  7. c of input performed by spice.
  8. c
  9. c spice version 2g.6  sccsid=tabinf 3/15/83
  10.       common /tabinf/ ielmnt,isbckt,nsbckt,iunsat,nunsat,itemps,numtem,
  11.      1   isens,nsens,ifour,nfour,ifield,icode,idelim,icolum,insize,
  12.      2   junode,lsbkpt,numbkp,iorder,jmnode,iur,iuc,ilc,ilr,numoff,isr,
  13.      3   nmoffc,iseq,iseq1,neqn,nodevs,ndiag,iswap,iequa,macins,lvnim1,
  14.      4   lx0,lvn,lynl,lyu,lyl,lx1,lx2,lx3,lx4,lx5,lx6,lx7,ld0,ld1,ltd,
  15.      5   imynl,imvn,lcvn,nsnod,nsmat,nsval,icnod,icmat,icval,
  16.      6   loutpt,lpol,lzer,irswpf,irswpr,icswpf,icswpr,irpt,jcpt,
  17.      7   irowno,jcolno,nttbr,nttar,lvntmp
  18. c spice version 2g.6  sccsid=miscel 3/15/83
  19.       common /miscel/ atime,aprog(3),adate,atitle(10),defl,defw,defad,
  20.      1  defas,rstats(50),iwidth,lwidth,nopage
  21. c spice version 2g.6  sccsid=cirdat 3/15/83
  22.       common /cirdat/ locate(50),jelcnt(50),nunods,ncnods,numnod,nstop,
  23.      1   nut,nlt,nxtrm,ndist,ntlin,ibr,numvs,numalt,numcyc
  24. c spice version 2g.6  sccsid=cje 3/15/83
  25.       common /cje/ maxtim,itime,icost
  26. c spice version 2g.6  sccsid=status 3/15/83
  27.       common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet,
  28.      1   xmu,sfactr,mode,modedc,icalc,initf,method,iord,maxord,noncon,
  29.      2   iterno,itemno,nosolv,modac,ipiv,ivmflg,ipostp,iscrch,iofile
  30. c spice version 2g.6  sccsid=flags 3/15/83
  31.       common /flags/ iprnta,iprntl,iprntm,iprntn,iprnto,limtim,limpts,
  32.      1   lvlcod,lvltim,itl1,itl2,itl3,itl4,itl5,itl6,igoof,nogo,keof
  33. c spice version 2g.6  sccsid=knstnt 3/15/83
  34.       common /knstnt/ twopi,xlog2,xlog10,root2,rad,boltz,charge,ctok,
  35.      1   gmin,reltol,abstol,vntol,trtol,chgtol,eps0,epssil,epsox,
  36.      2   pivtol,pivrel
  37. c spice version 2g.6  sccsid=dc 3/15/83
  38.       common /dc/ tcstar(2),tcstop(2),tcincr(2),icvflg,itcelm(2),kssop,
  39.      1   kinel,kidin,kovar,kidout
  40. c spice version 2g.6  sccsid=ac 3/15/83
  41.       common /ac/ fstart,fstop,fincr,skw2,refprl,spw2,jacflg,idfreq,
  42.      1   inoise,nosprt,nosout,nosin,idist,idprt
  43. c spice version 2g.6  sccsid=tran 3/15/83
  44.       common /tran/ tstep,tstop,tstart,delmax,tdmax,forfre,jtrflg
  45. c spice version 2g.6  sccsid=outinf 3/15/83
  46.       common /outinf/ xincr,string(15),xstart,yvar(8),itab(8),itype(8),
  47.      1   ilogy(8),npoint,numout,kntr,numdgt
  48. c spice version 2g.6  sccsid=blank 3/15/83
  49.       common /blank/ value(200000)
  50.       integer nodplc(64)
  51.       complex cvalue(32)
  52.       equivalence (value(1),nodplc(1),cvalue(1))
  53. c
  54. c
  55.       dimension titlop(4)
  56.       dimension nnods(50),aname(2)
  57.       data aname / 4htrap, 4hgear /
  58.       data titlop / 8hoption s, 8hummary  , 8h        , 8h         /
  59.       data ndefin / 2h.u /
  60.       data nnods / 2, 2, 2, 0, 2, 2, 2, 2, 2, 2,
  61.      1             2, 4, 3, 4, 0, 0, 4, 0, 1, 0,
  62.      2             0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  63.      3             0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  64.      4             2, 2, 2, 0, 0, 0, 0, 0, 0, 0 /
  65.       data aelmt,amodel,aoutpt /7helement,5hmodel,6houtput/
  66.       data alsdc,alstr,alsac / 2hdc, 4htran, 2hac /
  67. c
  68. c
  69.       call second(t1)
  70.       do 60 id=1,50
  71.       loc=locate(id)
  72.    10 if (loc.eq.0) go to 60
  73.       if (nodplc(loc+2).ne.ndefin) go to 50
  74.       nogo=1
  75.       locv=nodplc(loc+1)
  76.       if (id.ge.21) go to 20
  77.       anam=aelmt
  78.       go to 40
  79.    20 if (id.ge.31) go to 30
  80.       anam=amodel
  81.       go to 40
  82.    30 anam=aoutpt
  83.    40 write (iofile,41) anam,value(locv)
  84.    41 format('0*error*:  ',2a8,' has been referenced but not defined'/)
  85.    50 loc=nodplc(loc)
  86.       go to 10
  87.    60 continue
  88.       if (nogo.ne.0) go to 2000
  89. c
  90. c  construct ordered list of user specified nodes
  91. c
  92.       call getm4(junode,1)
  93.       nodplc(junode+1)=0
  94.       nunods=1
  95.       do 180 id=1,50
  96.       if (nnods(id).eq.0) go to 180
  97.       loc=locate(id)
  98.   110 if (loc.eq.0) go to 180
  99.       if (id.le.4) go to 120
  100.       if (id.le.8) go to 150
  101.       if (id.eq.19) go to 165
  102.       if (id.le.40) go to 120
  103.       if (id.le.43) go to 170
  104.   120 jstop=loc+nnods(id)-1
  105.       do 130 j=loc,jstop
  106.       call putnod(nodplc(j+2))
  107.   130 continue
  108.       go to 170
  109.   150 call putnod(nodplc(loc+2))
  110.       call putnod(nodplc(loc+3))
  111.       if (id.ge.7) go to 170
  112.       locp=nodplc(loc+id+1)
  113.       nssnod=2*nodplc(loc+4)
  114.   155 do 160 j=1,nssnod
  115.       call putnod(nodplc(locp+j))
  116.   160 continue
  117.       go to 170
  118.   165 locp=nodplc(loc+2)
  119.       call sizmem(nodplc(loc+2),nssnod)
  120.       go to 155
  121.   170 loc=nodplc(loc)
  122.       go to 110
  123.   180 continue
  124.       if (nogo.ne.0) go to 2000
  125.       ncnods=nunods
  126. c
  127. c  assign program nodes
  128. c
  129.   200 do 280 id=1,50
  130.       if (nnods(id).eq.0) go to 280
  131.       loc=locate(id)
  132.   210 if (loc.eq.0) go to 280
  133.       if (id.le.4) go to 220
  134.       if (id.le.8) go to 250
  135.       if (id.eq.19) go to 265
  136.       if (id.le.40) go to 220
  137.       if (id.le.43) go to 240
  138.   220 jstop=loc+nnods(id)-1
  139.       do 230 j=loc,jstop
  140.       call getnod(nodplc(j+2))
  141.   230 continue
  142.       go to 270
  143.   240 if (nodplc(loc+5).eq.0) go to 220
  144.       go to 270
  145.   250 call getnod(nodplc(loc+2))
  146.       call getnod(nodplc(loc+3))
  147.       if (id.ge.7) go to 270
  148.       locp=nodplc(loc+id+1)
  149.       nssnod=2*nodplc(loc+4)
  150.   255 do 260 j=1,nssnod
  151.       call getnod(nodplc(locp+j))
  152.   260 continue
  153.       go to 270
  154.   265 locp=nodplc(loc+2)
  155.       call sizmem(nodplc(loc+2),nssnod)
  156.       go to 255
  157.   270 loc=nodplc(loc)
  158.       go to 210
  159.   280 continue
  160. c
  161. c  check and set .nodeset nodes to their internal values
  162. c
  163.       call sizmem(nsnod,nic)
  164.       if(nic.eq.0) go to 300
  165.       do 290 i=1,nic
  166.       call getnod(nodplc(nsnod+i))
  167.   290 continue
  168. c
  169. c   check and set .ic nodes to their internal values
  170. c
  171.   300 call sizmem(icnod,nic)
  172.       if(nic.eq.0) go to 320
  173.       do 310 i=1,nic
  174.       call getnod(nodplc(icnod+i))
  175.   310 continue
  176.   320 if (nogo.ne.0) go to 2000
  177. c
  178. c  expand subcircuit calls
  179. c
  180.       call subckt
  181.       if (nogo.ne.0) go to 2000
  182.       if (ncnods.ge.2) go to 400
  183.       write (iofile,321)
  184.   321 format('0*error*:  circuit has no nodes'/)
  185.       nogo=1
  186.       go to 2000
  187.   400 numnod=ncnods
  188. c
  189. c  link unsatisfied references
  190. c
  191.       call lnkref
  192.       if (nogo.ne.0) go to 2000
  193. c
  194. c  generate subcircuit element names
  195. c
  196.       if (jelcnt(19).eq.0) go to 530
  197.       do 520 id=1,24
  198.       loc=locate(id)
  199.   510 if (loc.eq.0) go to 520
  200.       call subnam(loc)
  201.       loc=nodplc(loc)
  202.       go to 510
  203.   520 continue
  204. c
  205. c  translate node initial conditions to device initial conditions
  206. c  (capacitance, diode, bjt, jfet and mosfet only) when uic is
  207. c  specified on the .tran card
  208. c
  209.   530 if (nosolv.le.0) go to 600
  210.       call sizmem(icnod,nic)
  211.       if(nic.eq.0) go to 600
  212.       call getm8(lvnim1,numnod)
  213.       call zero8(value(lvnim1+1),numnod)
  214.       do 535 i=1,nic
  215.       node=nodplc(icnod+i)
  216.   535 value(lvnim1+node)=value(icval+i)
  217.       loc=locate(2)
  218.   540 if(loc.eq.0) go to 550
  219.       locv=nodplc(loc+1)
  220.       if(value(locv+2).ne.0.0d0) go to 545
  221.       node1=nodplc(loc+2)
  222.       node2=nodplc(loc+3)
  223.       value(locv+2)=value(lvnim1+node1)-value(lvnim1+node2)
  224.   545 loc=nodplc(loc)
  225.       go to 540
  226.   550 loc=locate(11)
  227.   555 if(loc.eq.0) go to 565
  228.       locv=nodplc(loc+1)
  229.       if(value(locv+2).ne.0.0d0) go to 560
  230.       node1=nodplc(loc+2)
  231.       node2=nodplc(loc+3)
  232.       value(locv+2)=value(lvnim1+node1)-value(lvnim1+node2)
  233.   560 loc=nodplc(loc)
  234.       go to 555
  235.   565 loc=locate(12)
  236.   570 if(loc.eq.0) go to 580
  237.       locv=nodplc(loc+1)
  238.       node1=nodplc(loc+2)
  239.       node2=nodplc(loc+3)
  240.       node3=nodplc(loc+4)
  241.       if(value(locv+2).eq.0.0d0) value(locv+2)=value(lvnim1+node2)-
  242.      1  value(lvnim1+node3)
  243.       if(value(locv+3).eq.0.0d0) value(locv+3)=value(lvnim1+node1)-
  244.      1  value(lvnim1+node3)
  245.       loc=nodplc(loc)
  246.       go to 570
  247.   580 loc=locate(13)
  248.   585 if(loc.eq.0) go to 590
  249.       locv=nodplc(loc+1)
  250.       node1=nodplc(loc+2)
  251.       node2=nodplc(loc+3)
  252.       node3=nodplc(loc+4)
  253.       if(value(locv+2).eq.0.0d0) value(locv+2)=value(lvnim1+node1)-
  254.      1  value(lvnim1+node3)
  255.       if(value(locv+3).eq.0.0d0) value(locv+3)=value(lvnim1+node2)-
  256.      1  value(lvnim1+node3)
  257.       loc=nodplc(loc)
  258.       go to 585
  259.   590 loc=locate(14)
  260.   595 if(loc.eq.0) go to 598
  261.       locv=nodplc(loc+1)
  262.       node1=nodplc(loc+2)
  263.       node2=nodplc(loc+3)
  264.       node3=nodplc(loc+4)
  265.       node4=nodplc(loc+5)
  266.       if(value(locv+5).eq.0.0d0) value(locv+5)=value(lvnim1+node1)-
  267.      1  value(lvnim1+node3)
  268.       if(value(locv+6).eq.0.0d0) value(locv+6)=value(lvnim1+node2)-
  269.      1  value(lvnim1+node3)
  270.       if(value(locv+7).eq.0.0d0) value(locv+7)=value(lvnim1+node4)-
  271.      1  value(lvnim1+node3)
  272.       loc=nodplc(loc)
  273.       go to 595
  274.   598 call clrmem(lvnim1)
  275. c
  276. c  process sources
  277. c
  278.   600 if (jtrflg.eq.0) go to 700
  279.       do 690 id=9,10
  280.       loc=locate(id)
  281.   610 if (loc.eq.0) go to 690
  282.       locv=nodplc(loc+1)
  283.       locp=nodplc(loc+5)
  284.       jtype=nodplc(loc+4)+1
  285.       go to (680,620,630,640,650,675), jtype
  286.   620 value(locp+3)=dmax1(value(locp+3),0.0d0)
  287.       if (value(locp+4).le.0.0d0) value(locp+4)=tstep
  288.       if (value(locp+5).le.0.0d0) value(locp+5)=tstep
  289.       if (value(locp+6).le.0.0d0) value(locp+6)=tstop
  290.       if (value(locp+7).le.0.0d0) value(locp+7)=tstop
  291.       temp=value(locp+4)+value(locp+5)+value(locp+6)
  292.       value(locp+7)=dmax1(value(locp+7),temp)
  293.       value(locv+1)=value(locp+1)
  294.       go to 680
  295.   630 if (value(locp+3).le.0.0d0) value(locp+3)=1.0d0/tstop
  296.       value(locp+4)=dmax1(value(locp+4),0.0d0)
  297.       value(locv+1)=value(locp+1)
  298.       go to 680
  299.   640 value(locp+3)=dmax1(value(locp+3),0.0d0)
  300.       if (value(locp+4).le.0.0d0) value(locp+4)=tstep
  301.       if (value(locp+5).le.value(locp+3))
  302.      1   value(locp+5)=value(locp+3)+tstep
  303.       if (value(locp+6).le.0.0d0) value(locp+6)=tstep
  304.       value(locv+1)=value(locp+1)
  305.       go to 680
  306.   650 value(locp+1)=dmin1(dmax1(value(locp+1),0.0d0),tstop)
  307.       iknt=1
  308.       call sizmem(nodplc(loc+5),nump)
  309.   660 temp=value(locp+iknt)
  310.       if (value(locp+iknt+2).eq.0.0d0) go to 670
  311.       if (value(locp+iknt+2).ge.tstop) go to 670
  312.       value(locp+iknt+2)=dmax1(value(locp+iknt+2),temp)
  313.       if(temp.ne.value(locp+iknt+2)) go to 665
  314.       write(iofile,661) value(locv)
  315.   661 format('0*error*:  element ',a8,' piecewise linear source table no
  316.      1t increasing in time')
  317.       nogo=1
  318.   665 iknt=iknt+2
  319.       if (iknt.lt.nump) go to 660
  320.   670 value(locp+iknt+2)=tstop
  321.       value(locv+1)=value(locp+2)
  322.       call relmem(nodplc(loc+5),nump-iknt-3)
  323.       go to 680
  324.   675 if (value(locp+3).le.0.0d0) value(locp+3)=1.0d0/tstop
  325.       if (value(locp+5).le.0.0d0) value(locp+5)=1.0d0/tstop
  326.       value(locv+1)=value(locp+1)
  327.   680 loc=nodplc(loc)
  328.       go to 610
  329.   690 continue
  330. c
  331. c  use default values for mos device geometries if not specified
  332. c
  333.   700 loc=locate(14)
  334.   710 if(loc.eq.0) go to 720
  335.       locv=nodplc(loc+1)
  336.       if(value(locv+1).le.0.0d0) value(locv+1)=defl
  337.       if(value(locv+2).le.0.0d0) value(locv+2)=defw
  338.       if(value(locv+3).le.0.0d0) value(locv+3)=defad
  339.       if(value(locv+4).le.0.0d0) value(locv+4)=defas
  340.       loc=nodplc(loc)
  341.       go to 710
  342. c
  343. c  print listing of elements, process device models,
  344. c  and check topology
  345. c
  346.   720 if (iprntl.eq.0) go to 730
  347.       call elprnt
  348.   730 call topchk
  349.       call modchk
  350.       if (nogo.ne.0) go to 2000
  351. c
  352. c  invert resistance values
  353. c
  354.   800 loc=locate(1)
  355.   810 if (loc.eq.0) go to 900
  356.       locv=nodplc(loc+1)
  357.       value(locv+1)=1.0d0/value(locv+2)
  358.       loc=nodplc(loc)
  359.       go to 810
  360. c
  361. c  process mutual inductors
  362. c
  363.   900 loc=locate(4)
  364.   910 if (loc.eq.0) go to 1000
  365.       locv=nodplc(loc+1)
  366.       nl1=nodplc(loc+2)
  367.       lptr1=nodplc(nl1+1)
  368.       nl2=nodplc(loc+3)
  369.       lptr2=nodplc(nl2+1)
  370.       value(locv+1)=value(locv+1)*dsqrt(value(lptr1+1)*value(lptr2+1))
  371.       loc=nodplc(loc)
  372.       go to 910
  373. c
  374. c  limit delmax  if transmission lines in circuit
  375. c
  376.  1000 if (jtrflg.eq.0) go to 1200
  377.       tdmax=0.0d0
  378.       loc=locate(17)
  379.  1010 if (loc.eq.0) go to 1200
  380.       locv=nodplc(loc+1)
  381.       delmax=dmin1(delmax,value(locv+2)/2.0d0)
  382.       tdmax=dmax1(tdmax,value(locv+2))
  383.       loc=nodplc(loc)
  384.       go to 1010
  385. c
  386. c  process source parameters
  387. c
  388.  1200 numbkp=0
  389.       if (jtrflg.eq.0) go to 1205
  390.       tol=1.0d-2*delmax
  391.       numbkp=2
  392.       call getm8(lsbkpt,numbkp)
  393.       value(lsbkpt+1)=0.0d0
  394.       value(lsbkpt+2)=tstop
  395.  1205 do 1290 id=9,10
  396.       loc=locate(id)
  397.  1210 if (loc.eq.0) go to 1290
  398.       locv=nodplc(loc+1)
  399.       locp=nodplc(loc+5)
  400.       temp=value(locv+3)/rad
  401.       value(locv+3)=value(locv+2)*dsin(temp)
  402.       value(locv+2)=value(locv+2)*dcos(temp)
  403.       if (jtrflg.eq.0) go to 1280
  404.       jtype=nodplc(loc+4)+1
  405.       go to (1280,1220,1230,1235,1240,1260), jtype
  406.  1220 value(locp+4)=value(locp+4)+value(locp+3)
  407.       temp=value(locp+5)
  408.       value(locp+5)=value(locp+4)+value(locp+6)
  409.       value(locp+6)=value(locp+5)+temp
  410.       time=0.0d0
  411.  1225 call extmem(lsbkpt,4)
  412.       value(lsbkpt+numbkp+1)=value(locp+3)+time
  413.       value(lsbkpt+numbkp+2)=value(locp+4)+time
  414.       value(lsbkpt+numbkp+3)=value(locp+5)+time
  415.       value(lsbkpt+numbkp+4)=value(locp+6)+time
  416.       numbkp=numbkp+4
  417.       time=time+value(locp+7)
  418.       if (time.ge.tstop) go to 1280
  419.       go to 1225
  420.  1230 value(locp+3)=value(locp+3)*twopi
  421.       call extmem(lsbkpt,1)
  422.  1231 value(lsbkpt+numbkp+1)=value(locp+4)
  423.       numbkp=numbkp+1
  424.       go to 1280
  425.  1235 call extmem(lsbkpt,2)
  426.       value(lsbkpt+numbkp+1)=value(locp+3)
  427.       value(lsbkpt+numbkp+2)=value(locp+5)
  428.       numbkp=numbkp+2
  429.       go to 1280
  430.  1240 iknt=1
  431.       call sizmem(nodplc(loc+5),nump)
  432.  1250 call extmem(lsbkpt,1)
  433.       value(lsbkpt+numbkp+1)=value(locp+iknt)
  434.       numbkp=numbkp+1
  435.       iknt=iknt+2
  436.       if (iknt.le.nump) go to 1250
  437.       go to 1280
  438.  1260 value(locp+3)=value(locp+3)*twopi
  439.       value(locp+5)=value(locp+5)*twopi
  440.  1280 loc=nodplc(loc)
  441.       go to 1210
  442.  1290 continue
  443. c
  444. c  augment breakpoint table for transmission line delays
  445. c
  446.       if (jtrflg.eq.0) go to 1300
  447.       loc=locate(17)
  448.  1292 if (loc.eq.0) go to 1300
  449.       locv=nodplc(loc+1)
  450.       td=value(locv+2)
  451.       ntemp=numbkp
  452.       do 1296 ibkp=1,ntemp
  453.       time=value(lsbkpt+ibkp)
  454.  1294 time=time+td
  455.       if (time.ge.tstop) go to 1296
  456.       call extmem(lsbkpt,1)
  457.       value(lsbkpt+numbkp+1)=time
  458.       numbkp=numbkp+1
  459.       go to 1294
  460.  1296 continue
  461.       call shlsrt(value(lsbkpt+1),numbkp)
  462.       nbkpt=1
  463.       do 1298 i=2,numbkp
  464.       if ((value(lsbkpt+i)-value(lsbkpt+nbkpt)).lt.tol) go to 1298
  465.       nbkpt=nbkpt+1
  466.       value(lsbkpt+nbkpt)=value(lsbkpt+i)
  467.       if (value(lsbkpt+nbkpt).ge.tstop) go to 1299
  468.  1298 continue
  469.  1299 call relmem(lsbkpt,numbkp-nbkpt)
  470.       numbkp=nbkpt
  471.       value(lsbkpt+numbkp)=dmax1(value(lsbkpt+numbkp),tstop)
  472.       loc=nodplc(loc)
  473.       go to 1292
  474. c
  475. c  finish breakpoint table
  476. c
  477.  1300 if (jtrflg.eq.0) go to 1600
  478.       call extmem(lsbkpt,1)
  479.       value(lsbkpt+numbkp+1)=tstop
  480.       numbkp=numbkp+1
  481.       call shlsrt(value(lsbkpt+1),numbkp)
  482.       nbkpt=1
  483.       do 1310 i=2,numbkp
  484.       if ((value(lsbkpt+i)-value(lsbkpt+nbkpt)).lt.tol) go to 1310
  485.       nbkpt=nbkpt+1
  486.       value(lsbkpt+nbkpt)=value(lsbkpt+i)
  487.       if (value(lsbkpt+nbkpt).ge.tstop) go to 1320
  488.  1310 continue
  489.  1320 call relmem(lsbkpt,numbkp-nbkpt)
  490.       numbkp=nbkpt
  491.       value(lsbkpt+numbkp)=dmax1(value(lsbkpt+numbkp),tstop)
  492. c
  493. c  print option summary
  494. c
  495.  1600 if (iprnto.eq.0) go to 1700
  496.       call title(0,lwidth,1,titlop)
  497.       write (iofile,1601) gmin,reltol,abstol,vntol,lvlcod,itl1,itl2
  498.  1601 format('0dc analysis -',/,
  499.      1   '0    gmin   = ',1pd10.3,/,
  500.      2   '     reltol = ',  d10.3,/,
  501.      3   '     abstol = ',  d10.3,/,
  502.      4   '     vntol  = ',  d10.3,/,
  503.      5   '     lvlcod = ',     i6,/,
  504.      6   '     itl1   = ',     i6,/,
  505.      7   '     itl2   = ',     i6,/)
  506.       write (iofile,1605) pivtol,pivrel
  507.  1605 format(
  508.      1   '     pivtol = ',1pd10.3,/,
  509.      2   '     pivrel = ',  d10.3)
  510.       write (iofile,1611) aname(method),maxord,chgtol,trtol,lvltim,xmu,
  511.      1   itl3,itl4,itl5
  512.  1611 format('0transient analysis -',/,
  513.      1   '0    method =  ',a8,/,
  514.      2   '     maxord = ',     i6,/,
  515.      3   '     chgtol = ',1pd10.3,/,
  516.      4   '     trtol  = ',  d10.3,/,
  517.      5   '     lvltim = ',     i6,/,
  518.      6   '     mu     = ',0pf10.3,/,
  519.      7   '     itl3   = ',     i6,/,
  520.      8   '     itl4   = ',     i6,/,
  521.      9   '     itl5   = ',     i6,/)
  522.       write (iofile,1621) limpts,limtim,maxtim,numdgt,value(itemps+1),
  523.      1   defl,defw,defad,defas
  524.  1621 format('0miscellaneous -',/,
  525.      1   '0    limpts = ',     i6,/,
  526.      2   '     limtim = ',     i6,/,
  527.      3   '     cptime = ',     i9,/,
  528.      4   '     numdgt = ',     i6,/,
  529.      5   '     tnom   = ',0pf10.3,/,
  530.      6   '     defl   = ',1pd10.3,/,
  531.      7   '     defw   = ',d10.3,/,
  532.      8   '     defad  = ',d10.3,/,
  533.      9   '     defas  = ',d10.3)
  534. c
  535. c  miscellaneous error checking
  536. c
  537.  1700 if (icvflg.eq.0) go to 1720
  538.       if (icvflg.le.limpts) go to 1710
  539.       icvflg=0
  540.       write (iofile,1701) limpts,alsdc
  541.  1701 format('0warning:  more than ',i5,' points for ',a4,' analysis,',/
  542.      11x,'analysis omitted.  this limit may be overridden using the ',/
  543.      21x,'limpts parameter on the .option card'/)
  544.       go to 1720
  545.  1710 if ((jelcnt(31)+jelcnt(36)).gt.0) go to 1720
  546.       if(ipostp.ne.0) go to 1720
  547.       icvflg=0
  548.       write (iofile,1711) alsdc
  549.  1711 format('0warning:  no ',a4,' outputs specified .',
  550.      1  '.. analysis omitted'/)
  551.  1720 if (jtrflg.eq.0) go to 1740
  552.       if (method.eq.1) maxord=2
  553.       if ((method.eq.2).and.(maxord.ge.3)) lvltim=2
  554.       if (jtrflg.le.limpts) go to 1730
  555.       jtrflg=0
  556.       write (iofile,1701) limpts,alstr
  557.       go to 1740
  558.  1730 if ((jelcnt(32)+jelcnt(37)+nfour).gt.0) go to 1735
  559.       if(ipostp.ne.0) go to 1735
  560.       jtrflg=0
  561.       write (iofile,1711) alstr
  562.       go to 1740
  563.  1735 if (nfour.eq.0) go to 1740
  564.       forprd=1.0d0/forfre
  565.       if ((tstop-forprd).ge.(tstart-1.0d-12)) go to 1740
  566.       nfour=0
  567.       call clrmem(ifour)
  568.       write (iofile,1736)
  569.  1736 format('0warning:  fourier analysis fundamental frequency is incom
  570.      1patible with'/11x,'transient analysis print interval ... fourier a
  571.      2nalysis omitted'/)
  572.  1740 if (jacflg.eq.0) go to 1800
  573.       if (jacflg.le.limpts) go to 1750
  574.       jacflg=0
  575.       write (iofile,1701) limpts,alsac
  576.       go to 1800
  577.  1750 if ((jelcnt(33)+jelcnt(34)+jelcnt(35)+jelcnt(38)+jelcnt(39)
  578.      1   +jelcnt(40)+idist+inoise).gt.0) go to 1800
  579.       if(ipostp.ne.0) go to 1800
  580.       jacflg=0
  581.       write (iofile,1711) alsac
  582. c
  583. c  sequence through the output lists
  584. c
  585.  1800 do 1820 id=41,45
  586.       if (id.le.43) numout=1
  587.       loc=locate(id)
  588.  1810 if (loc.eq.0) go to 1820
  589.       numout=numout+1
  590.       nodplc(loc+4)=numout
  591.       loc=nodplc(loc)
  592.       go to 1810
  593.  1820 continue
  594. c
  595. c   increase number of .prints if too many outputs for output line-width
  596. c
  597.       ifwdth=max0(numdgt-1,0)+9
  598.       noprln=min0(8,(lwidth-12)/ifwdth)
  599.       do 1860 id=31,35
  600.       loc=locate(id)
  601.  1830 if(loc.eq.0) go to 1860
  602.       noprex=nodplc(loc+3)-noprln
  603.       if(noprex.le.0) go to 1850
  604.       nodplc(loc+3)=noprln
  605.       call find(dble(jelcnt(id)),id,locnew,1)
  606.       nodplc(locnew+2)=nodplc(loc+2)
  607.       nodplc(locnew+3)=noprex
  608.       call copy4(nodplc(loc+2*noprln+4),nodplc(locnew+4),2*noprex)
  609.  1850 loc=nodplc(loc)
  610.       go to 1830
  611.  1860 continue
  612. c
  613. c  exit
  614. c
  615.  2000 call second(t2)
  616.       rstats(1)=rstats(1)+t2-t1
  617.       return
  618.       end
  619.